
/* #define avm_define_opcode(instruction index, execute1, execute2) */
 
/* 
 * General purpose register 
 * */
avm_define_opcode(IA_AAA, &v_cpu::aaa, NULL)
avm_define_opcode(IA_AAD, &v_cpu::aad, NULL)
avm_define_opcode(IA_AAM, &v_cpu::aam, NULL)
avm_define_opcode(IA_AAS, &v_cpu::aas, NULL)

// ADC
// Immediate to AL, AX, or EAX
avm_define_opcode(IA_ADC_ALIb, &v_cpu::adc_ALIb, NULL)
avm_define_opcode(IA_ADC_AXIw, &v_cpu::adc_AXIw, NULL)
avm_define_opcode(IA_ADC_EAXId, &v_cpu::adc_EAXId, NULL)
// Register to memory
avm_define_opcode(IA_ADC_EbGbM, &v_cpu::adc_EbGbM, NULL)
avm_define_opcode(IA_ADC_EwGwM, &v_cpu::adc_EwGwM, NULL)
avm_define_opcode(IA_ADC_EdGdM, &v_cpu::adc_EdGdM, NULL)
// Immediate to register
avm_define_opcode(IA_ADC_EbIbR, &v_cpu::adc_EbIbR, NULL)
avm_define_opcode(IA_ADC_EwIwR, &v_cpu::adc_EwIwR, NULL)
avm_define_opcode(IA_ADC_EdIdR, &v_cpu::adc_EdIdR, NULL)
// Immediate to memory
avm_define_opcode(IA_ADC_EbIbM, &v_cpu::adc_EbIbM, NULL)
avm_define_opcode(IA_ADC_EwIwM, &v_cpu::adc_EwIwM, NULL)
avm_define_opcode(IA_ADC_EdIdM, &v_cpu::adc_EdIdM, NULL)
// Register1 to register2
avm_define_opcode(IA_ADC_EbGbR, &v_cpu::adc_EbGbR, NULL)
avm_define_opcode(IA_ADC_EwGwR, &v_cpu::adc_EwGwR, NULL)
avm_define_opcode(IA_ADC_EdGdR, &v_cpu::adc_EdGdR, NULL)
// Register2 to register1
avm_define_opcode(IA_ADC_GbEbR, &v_cpu::adc_GbEbR, NULL)
avm_define_opcode(IA_ADC_GwEwR, &v_cpu::adc_GwEwR, NULL)
avm_define_opcode(IA_ADC_GdEdR, &v_cpu::adc_GdEdR, NULL)
// Memory to register
avm_define_opcode(IA_ADC_GbEbM, &v_cpu::load_Eb, &v_cpu::adc_GbEbM)
avm_define_opcode(IA_ADC_GwEwM, &v_cpu::load_Ew, &v_cpu::adc_GwEwM)
avm_define_opcode(IA_ADC_GdEdM, &v_cpu::load_Ed, &v_cpu::adc_GdEdM)

// ADD
// Immediate to AL, AX, or EAX
avm_define_opcode(IA_ADD_ALIb, &v_cpu::add_ALIb, NULL)
avm_define_opcode(IA_ADD_AXIw, &v_cpu::add_AXIw, NULL)
avm_define_opcode(IA_ADD_EAXId, &v_cpu::add_EAXId, NULL)
// Register to memory
avm_define_opcode(IA_ADD_EbGbM, &v_cpu::add_EbGbM, NULL)
avm_define_opcode(IA_ADD_EwGwM, &v_cpu::add_EwGwM, NULL)
avm_define_opcode(IA_ADD_EdGdM, &v_cpu::add_EdGdM, NULL)
// Immediate to memory
avm_define_opcode(IA_ADD_EbIbM, &v_cpu::add_EbIbM, NULL)
avm_define_opcode(IA_ADD_EwIwM, &v_cpu::add_EwIwM, NULL)
avm_define_opcode(IA_ADD_EdIdM, &v_cpu::add_EdIdM, NULL)
// Immediate to register
avm_define_opcode(IA_ADD_EbIbR, &v_cpu::add_EbIbR, NULL)
avm_define_opcode(IA_ADD_EwIwR, &v_cpu::add_EwIwR, NULL)
avm_define_opcode(IA_ADD_EdIdR, &v_cpu::add_EdIdR, NULL)
// Register1 to register2
avm_define_opcode(IA_ADD_EbGbR, &v_cpu::add_EbGbR, NULL)
avm_define_opcode(IA_ADD_EwGwR, &v_cpu::add_EwGwR, NULL)
avm_define_opcode(IA_ADD_EdGdR, &v_cpu::add_EdGdR, NULL)
// Register2 to register1
avm_define_opcode(IA_ADD_GbEbR, &v_cpu::add_GbEbR, NULL)
avm_define_opcode(IA_ADD_GwEwR, &v_cpu::add_GwEwR, NULL)
avm_define_opcode(IA_ADD_GdEdR, &v_cpu::add_GdEdR, NULL)
// Memory to register
avm_define_opcode(IA_ADD_GbEbM, &v_cpu::load_Eb, &v_cpu::add_GbEbM)
avm_define_opcode(IA_ADD_GwEwM, &v_cpu::load_Ew, &v_cpu::add_GwEwM)
avm_define_opcode(IA_ADD_GdEdM, &v_cpu::load_Ed, &v_cpu::add_GdEdM)

// FPU instruction
//
// MMX instruction
//
// SSE instruction
//
// SSE2 instruction
//
// SSE3 instruction
//
// SSE4.1 instruction
//
// SSE4.2 instruction
//
// AES instruction
//
// VMX instruction

